home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / v cisle / tclock / tclocklight-040702-3.exe / source / exe / about.c next >
C/C++ Source or Header  |  2003-12-27  |  4KB  |  177 lines

  1. /*-------------------------------------------------------------
  2.   about.c : "About" dialog
  3.   (C) Kazuto Sato 1997-2003
  4.   For the license, please read readme.txt.
  5.   
  6.   Written by Kazubon, Nanashi-san
  7. ---------------------------------------------------------------*/
  8.  
  9. #include "tclock.h"
  10.  
  11. #define IDC_MAILTO   100
  12. #define IDC_HOMEPAGE 101
  13.  
  14. #define IDC_HAND MAKEINTRESOURCE(32649)
  15.  
  16. /* Globals */
  17.  
  18. void ShowAboutBox(HWND hwnd);
  19. HWND g_hDlgAbout = NULL;      // dialog window handle, used in main2.c
  20.  
  21. /* Statics */
  22.  
  23. static BOOL CALLBACK DlgProcAbout(HWND, UINT, WPARAM, LPARAM);
  24. static void OnInit(HWND hDlg);
  25. static void OnLinkClicked(HWND hDlg, UINT id);
  26. static LRESULT CALLBACK LabLinkProc(HWND hwnd, UINT message,
  27.     WPARAM wParam, LPARAM lParam);
  28.  
  29. static HFONT   m_hfontLink = NULL;
  30. static HCURSOR m_hCurHand = NULL;
  31. static WNDPROC m_oldLabProc;
  32.  
  33. /*-------------------------------------------------------
  34.   show "About" dialog
  35. ---------------------------------------------------------*/
  36. void ShowAboutBox(HWND hwnd)
  37. {
  38.     if(g_hDlgAbout && IsWindow(g_hDlgAbout)) ;
  39.     else
  40.         g_hDlgAbout = CreateDialog(g_hInst, "ABOUTBOX",
  41.             NULL, DlgProcAbout);
  42.     SetForegroundWindow98(g_hDlgAbout);
  43. }
  44.  
  45. /*-------------------------------------------
  46.   dialog procedure
  47. ---------------------------------------------*/
  48. BOOL CALLBACK DlgProcAbout(HWND hDlg, UINT message,
  49.     WPARAM wParam, LPARAM lParam)
  50. {
  51.     switch(message)
  52.     {
  53.         case WM_INITDIALOG:
  54.             OnInit(hDlg);
  55.             return TRUE;
  56.         case WM_COMMAND:
  57.         {
  58.             int id, code;
  59.             id = LOWORD(wParam); code = HIWORD(wParam);
  60.             switch(id)
  61.             {
  62.                 case IDOK:
  63.                 case IDCANCEL:
  64.                     DestroyWindow(hDlg);
  65.                     break;
  66.                 case IDC_MAILTO:
  67.                 case IDC_HOMEPAGE:
  68.                     if(code == STN_CLICKED)
  69.                         OnLinkClicked(hDlg, id);
  70.                     break;
  71.             }
  72.             return TRUE;
  73.         }
  74.         case WM_CTLCOLORSTATIC:
  75.         {
  76.             int id; HDC hdc;
  77.             hdc = (HDC)wParam;
  78.             id = GetDlgCtrlID((HWND)lParam);
  79.             if(id == IDC_MAILTO || id == IDC_HOMEPAGE)
  80.             {
  81.                 SetTextColor(hdc, RGB(0,0,255));
  82.                 SetBkMode(hdc, TRANSPARENT);
  83.                 return (int)GetSysColorBrush(COLOR_3DFACE);
  84.             }
  85.             break;
  86.         }
  87.         case WM_DESTROY:
  88.             g_hDlgAbout = NULL;
  89.             if(m_hfontLink) DeleteObject(m_hfontLink);
  90.             m_hfontLink = NULL;
  91.             break;
  92.     }
  93.     return FALSE;
  94. }
  95.  
  96. /*-------------------------------------------
  97.   initialize main dialog
  98. ---------------------------------------------*/
  99. void OnInit(HWND hDlg)
  100. {
  101.     LOGFONT logfont;
  102.     HFONT hfont;
  103.     
  104.     SetMyDialgPos(hDlg, 32, 32);
  105.     
  106.     hfont = (HFONT)SendMessage(hDlg, WM_GETFONT, 0, 0);
  107.     GetObject(hfont, sizeof(LOGFONT), &logfont);
  108.     logfont.lfUnderline = 1;
  109.     m_hfontLink = CreateFontIndirect(&logfont);
  110.     
  111.     if(m_hfontLink)
  112.     {
  113.         SendDlgItemMessage(hDlg, IDC_MAILTO, WM_SETFONT,
  114.             (WPARAM)m_hfontLink, 0);
  115.         SendDlgItemMessage(hDlg, IDC_HOMEPAGE, WM_SETFONT,
  116.             (WPARAM)m_hfontLink, 0);
  117.     }
  118.     
  119.     if(m_hCurHand == NULL)
  120.         m_hCurHand = LoadCursor(NULL, IDC_HAND);
  121.     
  122.     m_oldLabProc = (WNDPROC)GetWindowLong(GetDlgItem(hDlg, IDC_MAILTO),
  123.         GWL_WNDPROC);
  124.     SetWindowLong(GetDlgItem(hDlg, IDC_MAILTO),
  125.         GWL_WNDPROC, (LONG)LabLinkProc);
  126.     SetWindowLong(GetDlgItem(hDlg, IDC_HOMEPAGE),
  127.         GWL_WNDPROC, (LONG)LabLinkProc);
  128. }
  129.  
  130. /*------------------------------------------------
  131.   link label is clicked
  132. --------------------------------------------------*/
  133. void OnLinkClicked(HWND hDlg, UINT id)
  134. {
  135.     char str[1024];
  136.     BOOL bOE = FALSE;
  137.     
  138.     if(id == IDC_MAILTO)
  139.     {
  140.         // Outlook Express is default mailer ?
  141.         GetRegStr(HKEY_CLASSES_ROOT, "mailto\\shell\\open\\command", "",
  142.             str, 1024, "");
  143.         if(strstr(str, "msimn.exe")) bOE = TRUE;
  144.         
  145.         strcpy(str, "mailto:");
  146.         if(bOE)
  147.         {
  148.             strcat(str, "Kazubon <");
  149.             GetDlgItemText(hDlg, id, str + strlen(str), 80);
  150.             strcat(str, ">?subject=About%20TClock");
  151.         }
  152.         else
  153.             GetDlgItemText(hDlg, id, str + strlen(str), 80);
  154.     }
  155.     else GetDlgItemText(hDlg, id, str, 80);
  156.     
  157.     // open browser / mailer
  158.     ShellExecute(hDlg, NULL, str, NULL, "", SW_SHOW);
  159. }
  160.  
  161. /*-------------------------------------------
  162.   suclass window procedure of link label
  163. ---------------------------------------------*/
  164. LRESULT CALLBACK LabLinkProc(HWND hwnd, UINT message,
  165.     WPARAM wParam, LPARAM lParam)
  166. {
  167.     switch(message)
  168.     {
  169.         case WM_SETCURSOR:
  170.             if(!m_hCurHand) break;
  171.             SetCursor(m_hCurHand);
  172.             return 1;
  173.     }
  174.     return CallWindowProc(m_oldLabProc, hwnd, message, wParam, lParam);
  175. }
  176.  
  177.